package org.example.controller;

import org.example.domain.Discussion;
import org.example.domain.response.ResponseResult;

import javax.servlet.http.HttpServletRequest;

public interface DiscussionController {

    /**
     * 新增讨论
     * @param discussion 讨论信息
     */
    ResponseResult saveDiscussion(Discussion discussion);

    /**
     *
     * 修改讨论
     * @param discussion 讨论信息
     */
    ResponseResult updateDiscussion(Discussion discussion);

    /**
     * 用户点赞讨论
     * @param userId 用户ID
     * @param discussionId 讨论ID
     */
    ResponseResult userLikeDiscussion(int userId, int discussionId);

    /**
     * 通过讨论ID查看讨论详细信息（包含content，没访问一次click字段加 1）
     * @param discussionId 讨论ID
     */
    ResponseResult getDiscussionById(int discussionId, HttpServletRequest request);

    /**
     * 分页查询最新的讨论
     * @param pageSize 分页大小
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionByPage(int pageSize, int currentPage);

    /**
     * 分页查询 点赞数 最多的讨论（默认分页大小 10）
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionOrderByLikes(int currentPage);

    /**
     * 分页查询 点击量 最多的讨论（默认分页大小 10）
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionOrderByClick(int currentPage);

    /**
     * 分页查看用户ID下的讨论，按照最新的排序（默认分页大小 10）
     * @param userId 用户ID
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionByUserId(int userId, int currentPage);

    /**
     * 通过ID删除讨论
     * @param discussionId 讨论ID
     */
    ResponseResult deleteDiscussionById(int discussionId);

    /**
     * 通过主题分页查询讨论
     * @param title 主题
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionByTitle(String title, int currentPage);

    /**
     * 通过类型查询讨论
     * @param type 类型
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionByType(String type, int currentPage);

    /**
     * 多条件查询（主题，类型，userId）
     * @param discussion 条件
     * @param currentPage 当前分页
     */
    ResponseResult getDiscussionByCondition(Discussion discussion, int currentPage);

    /**
     * 通过类型、标题、讨论 内容全局查询讨论
     * @param key 查询关键字
     */
    ResponseResult getDiscussionByKey(String key, int pageSize, int currentPage);

    /**
     * 按讨论ID将讨论从数据库中添加到ES中
     * @param discussionId 讨论ID
     */
    public ResponseResult addDiscussionFromMysqlToESById(int discussionId);

}
